package com.guoyw.rabbitmq.springbootrabbitmq.rabbitmq;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @Description: TODO
 * @Author: guoyw
 * @CreateDate: 2021/3/21 4:28 下午
 * @Version: 1.0
 * @Copyright COPYRIGHT © 2021 言津信息.沪ICP备18011820号.
 */

@Slf4j
@Component
public class ConcumerReceiver {

  @RabbitListener(queues = "hello-queue")
  public void helloWorldReceiver(Message message){
    log.info("收到hello-queue消息 ： {} ",new String(message.getBody()));
  }

  //工作队列模式
  @RabbitListener(queues="work_sb_mq_q")
  public void wordQueueReceiveq1(String message) {
    log.info("收到 工作队列模式-1 消息 ： {} ",message);
  }
  @RabbitListener(queues="work_sb_mq_q")
  public void wordQueueReceiveq2(String message) {
    log.info("收到 工作队列模式-2 消息 ： {} ",message);
  }


  //Routing路由模式
  @RabbitListener(queues="direct_sb_mq_q1")
  public void routingReceiveq1(String message) {
    log.info("收到 Routing路由模式 direct_sb_mq_q1 消息 ： {} ",message);
  }
  @RabbitListener(queues="direct_sb_mq_q2")
  public void routingReceiveq2(String message) {
    log.info("收到 Routing路由模式 direct_sb_mq_q2 消息 ： {} ",message);
  }

  //pub/sub模式进行消息监听
  @RabbitListener(queues="fanout.q1")
  public void fanoutReceiveq1(String message) {
    log.info("发布订阅模式 fanout.q1 消息 ： {} ",message);
  }
  @RabbitListener(queues="fanout.q2")
  public void fanoutReceiveq2(String message) {
    log.info("发布订阅模式 fanout.q2 消息 ： {} ",message);
  }

  //topic 模式
  //注意这个模式会有优先匹配原则。例如发送routingKey=hunan.IT,那匹配到hunan.*(hunan.IT,hunan.eco),之后就不会再去匹配*.ITd
  @RabbitListener(queues="topic_sb_mq_q1")
  public void topicReceiveq1(String message) {
    System.out.println("Topic模式 topic_sb_mq_q1 received message : " +message);
  }
  @RabbitListener(queues="topic_sb_mq_q2")
  public void topicReceiveq2(String message) {
    System.out.println("Topic模式 topic_sb_mq_q2 received  message : " +message);
  }

}
